local AddOnName, Env = ...
local ADDON = LibStub("AceAddon-3.0"):NewAddon(AddOnName,"AceConsole-3.0","AceEvent-3.0",'DiesalTools-1.0')
Env[1], _G[AddOnName] = ADDON, ADDON
-- ~~| Development |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ADDON.DEV = DiesalDevelopment and DiesalDevelopment.Tools or {}
setmetatable(ADDON.DEV,{ __index = function(t, k) return function() return end end })
local DEV = ADDON.development
-- ~~| Lua Upvalues |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
local print, format						= print, string.format
-- ~~| WoW Upvalues |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-- ~~| ADDON constants |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ADDON.VERSION 			= GetAddOnMetadata(AddOnName, "Version")
ADDON.PLAYERNAME		= UnitName("player")
ADDON.REALM 			= GetRealmName()
ADDON.MEDIAPATH 		= [[Interface\AddOns\]]..AddOnName..[[\media\]]
ADDON.PLAYERCLASS		= select(2,UnitClass("PLAYER"))
ADDON.SCRIPTPATH		= '\\scripts\\XengineScripts\\'

-- ~~| ADDON variables |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
local GREEN 		= '|cff00ff00'
local YELLOW 		= '|cffffff00'
local BLUE	 		= '|cff00aaff'
local ORANGE		= '|cffffaa00'
local GREY90		= '|cffe6e6e6'

local function printTable(t)
  local buf = {  }
  for k, v in pairs(t) do
    if type(v) =='string' then
      buf[#buf+1] = format(' %s"%s"%s',GREEN,v,ORANGE)
    elseif type(v) =='number' then
      buf[#buf+1] = format(' %s%s%s',YELLOW,v,ORANGE)
    else 
      buf[#buf+1] = format(' %s%s %s= %s%s%s',GREY90,k,ORANGE,BLUE,tostring(v),ORANGE) 
    end
  end
  return format('%s{%s }',ORANGE,table.concat(buf,','))
end
local function printVariable(value)			
	if type(value)=='boolean' then
		return BLUE..tostring(value)
	elseif type(value)=='number' then
		return YELLOW..value
	elseif type(value)=='string' then		
		return format('%s"%s"',GREEN,value)
	elseif type(value)=='table' then
		return printTable(value)
	else		
		return tostring(value)
	end	
end
-- ~~ Garbage Collector ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ADDON.garbageCollector = CreateFrame('Frame')
ADDON.garbageCollector.time = 30
ADDON.garbageCollector:SetScript('OnUpdate', function(this,elapsed)
	if this.time < 0 then		
		this.time = 30 -- 30 second garbage collection
		collectgarbage()
	else
		this.time = this.time - elapsed
	end
end)
-- ~~| StaticPopupDialogs |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
StaticPopupDialogs[AddOnName:upper().."_RENAMESET"] = {
	text = "Are you sure you want to rename this set?",
	button1 = TEXT(YES),
	button2 = TEXT(NO),
	OnAccept = function(self)
		ADDON.Configurator:RenameSet(self.key,self.value)
	end,
	OnCancel = function(self)
		ADDON.Configurator.setSelect:SetValue(self.key)
  	end,
	timeout = 0,
	hideOnEscape = 1,
	exclusive = 1,
	whileDead = 1,
	preferredIndex = 3,
}
-- ~~| ADDON API |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- scriptVars, rotEngine, dev
function	ADDON:Debug(mode,...)
	if ADDON.db.global.debug[mode] then
		if mode == 'OptUpdate' then
			local name, type, value = ...			
	 		print(format("|cff0080ff[|cff00aaff%s|cff0080ff]|cffffd400 Debug(%s)|cffe5e5e5 |r%s, '%s' = %s",AddOnName,mode,name,type,printVariable(value)))
		else 		
			for i = 1, select('#', ...) do				
				print(format("|cff0080ff[|cff00aaff%s|cff0080ff]|cffffd400 Debug(%s)|cffe5e5e5 %s",AddOnName,mode,select(i, ...)))
			end	
		end
	end
end
function ADDON:Error(msg)
	if not msg then return end
	PlaySoundFile("Sound\\creature\\Murloc\\mMurlocAggroOld.ogg")
	print(format("|cff0080ff[|cff00aaff%s|cff0080ff]|cffff0000 <error> %s",AddOnName,msg))	
end
function ADDON:Print(s,...)
	if not s then return end
	print(format("|cff0080ff[|cff00aaff%s|cff0080ff]|cffffffff %s",AddOnName,s))
	return self:Print(...)
end





